
package net.sf.rose.util;

import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.Properties;

/**
 * 功能：提供SQL语句统一访问途径<p>
 * 实现：在工程目录的指定位置预加载message的配置信息。具体位置在程序根目录的resource/message.properties<p>
 * 异常：如果找不到messages配置文件将抛出RuntimeException异常。如果配置文件加载失败也将抛出异常。
 * @author fengjian
 * @since 2012/06/23
 */
public class MessageUtils {

	private static String FILENAME = "resource/message.properties";

	private static Properties pro = null;

	//加载配置文件
	static {
		pro = new Properties();
		InputStream in = MessageUtils.class.getClassLoader().getResourceAsStream(FILENAME);
		if (in != null) {
			try {
				pro.load(in);
				in.close();
			} catch (IOException e) {
				RuntimeException re = new RuntimeException(e.getMessage());
				re.setStackTrace(e.getStackTrace());
				throw re;
			}
		} else {
			String cn = MessageUtils.class.getName();
			String me = "类(" + cn + ")没有找到文件：" + FILENAME + "。";
			RuntimeException re = new RuntimeException(me);
			throw re;
		}
	}

	/**
	 * 返回键对应的消息字符串。
	 */
	public static String get(String key) {
		String val = pro.getProperty(key);
		if (val != null) {
			return val;
		} else {
			return key;
		}
	}

	/**
	 * 取得键对应的消息字符串，并用参数替换后返回。
	 */
	public static String get(String key, Object... arguments) {
		String val = pro.getProperty(key);
		if (val == null) {
			return key;
		}
		try {
			return new MessageFormat(val).format(arguments);
		} catch (MissingResourceException e) {
			return key;
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			System.out.println(MessageUtils.get("login.title"));
			System.out.println(MessageUtils.get("affairmanager"));
			System.out.println(MessageUtils.get("goodmanager"));
			System.out.println(MessageUtils.get("you"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
